/*
*axios的二次封装

**开发环境  测试环境  生产环境
**Dev：开发环境，该环境下的配置项只影响开发人员本地代码配置，在项目初期代码本地编写时调试使用
**Test：测试环境，该环境配置影响整个团队的测试环境
**Production：正式生产环境，程序最终发布后所需要的参数配置

editconfig配置文件
axios.get('', {})参数一：请求地址   参数二：配置信息params、header
axios.post('',{},{})参数一：请求地址，参数二：传递的数据  参数三：配置信息   axios默认发送的数据是json格式
*/
////封装

import axios from "axios";
import qs from 'qs'

switch (process.env.NODE_EVN){
  case 'production'://生产环境 程序最终发布后所需要的参数配置
    axios.defaults.baseURL = 'http://localhost:5200/gege';
    break;
  default:          //开发环境 该环境下的配置项只影响开发人员本地代码配置，在项目初期代码本地编写时调试使用
    axios.defaults.baseURL = 'http://localhost:5200/gege';

}
/*
    跨域是否允许携带凭证以及设置超时时间
* */
axios.defaults.withCredentials = true;//不加这个  在跨域的时候是不允许携带token的
axios.defaults.timeout = 10000;//10s

/*
      设置请求传递数据的格式(看服务器要求什么格式)
      一般都是x-www-form-urlencoded
      -----看要求  没要求的话可以不设置
* */
axios.defaults.headers['Content-Type'] = 'applocation/x-www-form-urlencoded'
axios.defaults.transformRequest = data => qs.stringify(data);


/*
 请求拦截器
客户端发送请求---->[请求拦截器]----->服务器
* token校验(JWT)---->接收服务器返回的token，存储到vuex/本地存储
* */

axios.interceptors.request.use(config => {
  return config
},error => {
  return Promise.reject(error);
});

/* 响应拦截器（最主要的）
* 服务器返回信息  -->[拦截的统一处理]
* */
axios.interceptors.response.use(response => {
  return response.data;
},error => {
  let {response} = error;
  if (response){
    //服务器最起码返回结果
    switch (response.status){
      case 401://未登录   权限
        break;
      case 403://token过期  服务器拒绝执行
        break;
      case 404://找不到页面
        break;
    }
  }else {
    //服务器连结果都没有返回
    if (window.navigator.onLine){
      //断网处理：可以跳转到断网页面
      return;
    }
  return Promise.reject(error)
  }
});

export default axios;









